﻿
//         进阶版猜数字游戏
// 猜数字游戏：
//1.首先给出猜数字的范围，屏幕提示（难点：显示出规定范围内的数字)
//2.系统需要随机生成一个数字（难点：随机性数字）
//3.猜数字，一次肯定是猜不对的，肯定要猜很多次才行（难点：猜的过程要形成一个循环）
//4.猜错了需要提示，打了，小了，建立if语句，表示出情况（难点：if 语句）
//5.游戏初始界面，选择语句，Switch判断你要玩吗（难点：Switch语句，建立选择）
//6.玩了一把，不退出程序，还想在玩一把（难点：循环嵌套）
//7.给出正确答案


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
	int i = 0;
	do
	{
		printf("这是一款猜数字游戏，你想要玩吗？（数字范围是0-100）\n");
		printf("                             \n");
		printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
		printf("$$$$$$$  0,结束游戏  $$$$$$$$\n");
		printf("$$$$$$$  1,开始游戏  $$$$$$$$\n");
		printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
		srand((unsigned int)time(NULL));
		scanf("%d", &i);
		switch (i)
		{
		case 0:
			printf("游戏结束，退出游戏！\n");
			break;
		case 1:
		{
			//随机生成一个数字，且有范围，用rand()和srand
			int s = rand() % 100 + 1;
			int guess = 0;
			while (1)
			{
				printf("猜猜数字\n");
				scanf("%d", &guess);

				if (guess < s)
				{
					printf("猜小了呀！\n");
				}
				else if (guess > s)
				{
					printf("猜大了哦\n");
				}
				else
				{
					printf("恭喜你，猜对啦！\n");
					break;
				}
			}
			break;
		}
		default:
		{
			printf("输入错误，请重新输入！\n");
			break;
		}

		}
	} while (i!= 0);

	return 0;
}

//// !!!!!!!!!!                               这是鹏哥敲得
////#include <stdio.h>
////#include <stdlib.h>
////#include <time.h>
////
//////自己创造的一个函数
////void menu()
////{
////	printf("*************************\n");
////	printf("***     1. play       ***\n");
////	printf("***     0. exit       ***\n");
////	printf("*************************\n");
////}
////
////void game()
////{
////	//1. 电脑生成一个随机数
////	//生成随机数
////	int r = rand() % 100 + 1;
////	//2. 猜数字 - 循环
////	int guess = 0;
////	system("cls");
////	while (1)
////	{
////		printf("请猜数字:");
////		scanf("%d", &guess);
////		if (guess > r)
////		{
////			printf("猜大了\n");
////		}
////		else if (guess < r)
////		{
////			printf("猜小了\n");
////		}
////		else
////		{
////			printf("恭喜你，猜对了，数字是:%d\n", r);
////			break;
////		}
////	}
////}
//
//////只给你5次机会
////
////int main()
////{
////	int input = 0;
////	//设置随机数的生成起点
////	srand((unsigned int)time(NULL));
////
////	do
////	{
////		menu();//打印菜单
////		
////		printf("请选择>");
////		scanf("%d", &input);
////		switch (input)
////		{
////		case 1:
////			game();
////			break;
////			printf("游戏结束，退出游戏\n");
////			break;
////		case 0:
////		default:
////			printf("选择错误\n");
////			break;
////		}
////
////	} while (input);
////
////
////	return 0;
////}
////
//
//
////！！！！！！！！！！！！！！！！！！！！这是小爱同学敲得代码
//
////在C语言中， default 标签跳过变量初始化操作的错误通常是因为变量在 switch 语句内部定义，而 default 标签可能会跳过这些变量的初始化。
////
////以下是对你代码的修改建议和解释：
////变量定义的位置：将 int s 和 int guess 的定义移到 switch 语句之外，以确保在所有可能的执行路径中，这些变量都能被初始化。
////while (1) 循环的嵌套：代码中存在一些不必要的 while(1) 循环嵌套，这可能会导致逻辑混乱。可以适当简化。
////以下是修改后的代码：
////
////#include <stdio.h>
////#include <stdlib.h>
////#include <time.h>
////
////int main()
////{
////    int i = 0;
////    do
////    {
////        printf("这是一款猜数字游戏，你想要玩吗？（数字范围是0-100）\n");
////        printf("                             \n");
////        printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
////        printf("$$$$$$$  0,结束游戏  $$$$$$$$\n");
////        printf("$$$$$$$  1,开始游戏  $$$$$$$$\n");
////        printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
////        srand((unsigned int)time(NULL));
////        scanf("%d", &i);
////
////        switch (i)
////        {
////        case 0:
////            printf("游戏结束，退出游戏!\n");
////            break;
////        case 1:
////        {
////            int s = rand() % 100 + 1;
////            int guess = 0;
////            while (1)
////            {
////                printf("猜猜数字\n");
////                scanf("%d", &guess);
////                if (guess < s)
////                {
////                    printf("猜小了呀!\n");
////                }
////                else if (guess > s)
////                {
////                    printf("猜大了哦\n");
////                }
////                else
////                {
////                    printf("恭喜你，猜对啦!\n");
////                    break;
////                }
////            }
////            break;
////        }
////        default:
////            printf("输入错误，请重新输入!\n");
////            break;
////        }
////    } while (i != 0);
////
////    return 0;
////}
//
////修改说明：
////将 int s 和 int guess 的定义移到 case 1 的代码块内，确保变量在使用前被初始化。
////调整了 while(1) 循环的嵌套结构，使代码逻辑更加清晰。
////修改了 do - while 循环的条件，确保当用户输入 0 时，游戏能够正确结束。
////这样修改后，代码应该能够正常运行，并且不会再出现“ default 标签跳过变量初始化操作”的错误。




//srand  是C语言标准库中的函数，并非关键字。
//
//它的原型是  void srand(unsigned int seed) ，定义在  <stdlib.h>  头文件中，作用是为随机数生成器设置起始点（种子），
//这样后续调用  rand  函数时能产生不同的随机数序列 。
//例如使用  srand(time(NULL));  可以基于当前时间设置种子，让每次程序运行产生不一样的随机数。